// 腾讯云对象存储
import COS from 'cos-js-sdk-v5'
// getCosSign是向后台请求的接口，传参依照情况而定。一般后台会返回密钥等相关信息
import {credential} from '@/api/global';
import { useUserStoreHook } from "@/store/modules/user";
import { ElMessage } from "element-plus";

var config = {
  Bucket: '',
  Region: '',
  Key:''
};
export const upload = (file, callback)=> {
  // let fileUrl = ''
  let token = useUserStoreHook.getToken;
  credential().then((response:any) => { // 后台接口返回 密钥相关信息
    console.log(response)
    // let uploadFileName = Date.parse(new Date())
    let uploadFileName = new Date().getTime()
    if (response) {
      const credentials = response?.data;
      config.Bucket = credentials.bucketName;
      config.Region = credentials.bucketArea;
      config.Key = `linggong/${uploadFileName}/${file.name}`;
    var cos = new COS({
        getAuthorization: function (options, callback) {
          callback({
            TmpSecretId: credentials.tmpSecretId,        // 临时密钥的 tmpSecretId
            TmpSecretKey: credentials.tmpSecretKey,      // 临时密钥的 tmpSecretKey
            SecurityToken: credentials.sessionToken, // 临时密钥的 sessionToken
            // 建议返回服务器时间作为签名的开始时间，避免用户浏览器本地时间偏差过大导致签名错误
            StartTime: credentials.startTime, // 时间戳，单位秒，如：1580000000
            ExpiredTime: credentials.expiredTime, // 临时密钥失效时间戳，是申请临时密钥时，时间戳加 durationSeconds
            ScopeLimit: false, // 细粒度控制权限需要设为 true，会限制密钥只在相同请求时重复使用
          })
        }
      })
      
      cos.putObject({
        Bucket: config.Bucket, // 填入您自己的存储桶，必须字段
        Region: config.Region,  // 存储桶所在地域，例如ap-beijing，必须字段
        Key: config.Key,  // 存储在桶里的对象键（例如1.jpg，a/b/test.txt），必须字段
        Body: file, // 必须，上传文件对象，可以是input[type="file"]标签选择本地文件后得到的file对象
        onProgress: function(progressData) {
            console.log(JSON.stringify(progressData));
        }
    }, function(err, data) {
        if (err) {
          console.log('上传失败', err);
            ElMessage({
              message: '文件上传失败,请重新上传',
              type: 'error',
            })
        } else {
          console.log('上传成功', data);
          let fileUrl = data.Location
          callback(fileUrl)
        }
    });
    // cos.putObject({// 此处用了最简单的上传函数，此外，腾讯云还支持分片上传函数等等。
    //     Bucket: config.Bucket, // 存储桶名称
    //     Region: config.Region, // 地区
    //     Key: config.Key, // 图片名称
    //     StorageClass: 'STANDARD',
    //     Body: file, // 上传文件对象
    //     // onHashProgress: function (progressData) {
    //     //   console.log('校验中', JSON.stringify(progressData));
    //     // },
    //     onProgress: function (progressData) {
    //       console.log('上传中', JSON.stringify(progressData));
    //     },
    //     Headers: {
    //       "Authorization": token
    //     }

    // },
    //   function (err, data) {// 此处的两个传参是腾讯云返回的，data与上面的data不一样。直接照着写就可以。
    //   // 这里的data如果是个带有Location等的对象，则说明上传成功。
    //     if (err) {
    //       ElMessage({
    //         message: '文件上传失败,请重新上传',
    //         type: 'error',
    //       })
    //     } else {
    //       let fileUrl = data.Location
    //       callback(fileUrl)
    //     }
    //   }
    //   )
    }
   
  })
}
